Android 11 隐私更新
编辑:Fung Lam||校对:Yang||排版:Hayley
今天小编给大家带来的分享是Android 11 隐私更新的相关内容,在昨天的推文 What’s new in Android 中给各位小伙伴们分享了Android 11的最新更新,今天的推文将聚焦于隐私更新。
分享嘉宾是来自 Google 的开发者技术推广工程师 Fung Lam ,从事 Android 应用开发多年,且一直活跃于各 GDG 社区。目前主要进行 Android 兼容性和 Android TV 相关的工作。
话不多说,让我们赶紧切入正题,来看看嘉宾的现场实录吧~
隐私相关更新包括以下五个方面的内容:
首先是权限变更,从 Android 10 开始,我们倾向选择向应用提供比较少的私有数据,因为这都是关于用户的,比如摄像头、地理位置和录音。
在 Android 11,如果要求用户给你地理位置的权限时,用户会有一个仅限这一次(only this time) 的额外选项,表示用户只给你的应用一次这个权限。当用户下一次打开应用的时候,系统会再次询问权限。麦克风和摄像头也是一样,存在一次性权限权限。
开发者只要遵守了权限申请相关的最佳实践,就不需要更改自己应用的代码。
Android 11 对位置权限增加了前台和后台的区别。Android 11 之前,应用只是询问用户,给或者不给权限。但如果是应用 针对 Android 11 (Target SDK Level = 30),应先询问用户有没有这个授权,然后用户同意这个授权之后,需要再询问用户,还需要一个在后台时获取地理位置的权限。
对于用户来说,他们是应该知道你的应用访问我的数据的原因。其实有时候连开发者也想知道原因,但是存在一些问题导致开发者不能明确知道是什么在什么时候存取了。例如代码不是开发者写的,有可能开发者只是用了一个第三方库,或者代码只是从前的人留下来的,所以开发者也不知道哪些地方会去读取了用户的数据。
预期外的访问其实经常都有,它可以是老代码、也可以是第三方的库。他们中间可以有好多不同的关系。
Android 11 提供了一个新的API,它可以让你在访问某些隐私数据之后得到一个回调,通过回调可以知道访问了哪些数据,同时也可以为这些功能附加标签。
简单来说。现在代码是我不知道在什么地方访问了位置,我不知道在什么地方读取了联系人,但是有了新的 API 以后,开发者就可以把隐私数据分成是不同的类别。如果应用访问位置的时候,开发者就知道是导航的时候访问了,还是找朋友的时候访问了,还是其他功能访问了。开发者就能知道是哪一行代码有问题。例如一般来说找朋友其实应该不需要我的位置,应该只是需要联系人的数据,如果发现访问了位置,开发者就知道这里可能出错了。
接下来是关于 应用包可见性 (Package Visibility) 的一个问题。用户经常反馈的问题就是:某些应用会监听我安装了哪些应用,然后按照这些应用来投放广告,我什么隐私都没有了。比方说我安装了一个小学生做作业的应用,然后其他应用就知道我家里应该是有个小孩,然后就会不停的给我推送一些关于小孩的广告。
从前如果我们使用 PackageManger.getInstalledPackages(),他就会告诉开发者,应用包的信息。但是如果是 target 30,就有点改变了。如果是通过 getPakcageInfo 获取自己应用的信息,是没有影响的;如果要找手机安装了哪些应用,这个行为就有改变了,它只会给你一个结果,这个结果就只有你的应用本身,还有一些系统的应用,其他的应用是看不见的。
总结一下:
不受影响的场景:
获取自己应用的信息
获取一些系统应用的信息
通过隐式 Intent 启动其他应用
受影响的场景:
尝试获取手机安装了哪些第三方应用 --- 不会返回第三方应用的信息
尝试通过包名获取其他应用的信息 ---- NameNotFoundException
如果需要查询特定应用:
在 manifest 中单独声明要查询的应用
查询全部应用:
需要额外申请 QUERY_ALL_PACKAGES 权限
分区存储其实在 Android 10 我们已经推出了,但是去年推出的时候开发者还可以选择性采用。但 Android 11 中,开发者就必须遵守分区存储了。
那么分区储存是什么?应用里面如果有照片、视频等媒体文件,可以把它放到公有的空间,让其他的应用也可以访问我的文件,可以看我的视频,可以看到我的照片。但是其他私有文件都不允许其他应用访问,除非透过 FileProvider 等特别设置。
如果你是使用分区存储的话,弹窗要求授权的时候,你会看见是从前我们是要求一个储存所有文件的授权,现在变成了要求文件和媒体的授权。
MediaStore Api 也新增了一些接口:
READ_PHONE_STATE 变更
READ_PHONE_STATE 权限将只能获取电话相关的状态,不能获取电话号码。如需要获取电话号码,需要额外申请 READ_PHONE_NUMBERS 权限。
MAC 地址访问限制
Google Developer Groups 谷歌开发者社区,是谷歌开发者部门发起的全球项目,面向对 Google 和开源技术感兴趣的人群而存在的公益性开发者社区。GDG Shanghai 创立于 2009 年,是全球 GDG 社区中最活跃和知名的技术社区之一,每年举办 30 – 50 场大大小小的科技活动,每年影响十几万以上海为中心辐射长三角地带的开发者及科技从业人员。
社区中的各位组织者均是来自各个行业有着本职工作的互联网从业者,我们需要更多新鲜血液的加入!如果你对谷歌技术感兴趣,业余时间可调配,认同社区的价值观,愿意为社区做出贡献,欢迎加入我们成为社区志愿者!
志愿者加入方式:关注上海 GDG 公众号:GDG_Shanghai,回复:志愿者。
社区成员加入方式:请发邮件至以下邮箱
gdg-shanghai+subscribe@googlegroups.com